package ec.edu.ups.cidi.siia.plamdep.webcrawler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ec.edu.ups.cidi.siia.plamdep.configuracion.ConfiguracionConexionWeb;
import ec.edu.ups.cidi.siia.plamdep.modelo.webcrawler.Bibliografia;
import ec.edu.ups.cidi.siia.plamdep.utils.Log;
import ec.edu.ups.cidi.siia.plamdep.webcrawler.descarga.*;
import ec.edu.ups.cidi.siia.plamdep.webcrawler.extractorlinks.*;
public class Busqueda {
       private DescargarFuente downloaderFuente=new DescargarFuente();
       static{new ConfiguracionConexionWeb();}
   	   static Map<String,Object>parametersConexion=new HashMap<String, Object>();
   	   IExtractorLinks extractor = null;
   	   static int proxyNum=0;
     
   	   private void cargarResultados(String link,List<Bibliografia> resultados)
        {
   		   System.out.println("carga:"+link);
                String contenidoHTML="";
                if(link.startsWith("https://www.google.com"))
                {	
                	System.out.println("Extraccion de Google");
                	extractor=new LinksGoogle();
                	contenidoHTML=downloaderFuente.descargarHTML(link,"GET",null);
                }
                else if(link.startsWith("http://webproxy"))
                {	extractor=    new LinksWebProxy();
            		contenidoHTML=downloaderFuente.descargarHTML(link,"GET",null);
                }
                else if(link.startsWith("http://www.bing.com"))
                {
                	extractor=new LinksBing();
                	contenidoHTML=downloaderFuente.descargarHTML(link,"GET",null);
                }
                else if(link.startsWith("http://search.yahoo.com"))
                {	
                	extractor=new LinksYahoo();
                	contenidoHTML=downloaderFuente.descargarHTML(link,"GET",null);
                }
                else if(link.startsWith("http://www.onlinebrowser.net"))
                {	
                	extractor=new LinksOnlineBrowser();
                	contenidoHTML=downloaderFuente.descargarHTML(link,"GET",null);
                }
                else if(link.startsWith("https://www.yellowproxy.net"))
                {	
                	parametersConexion.clear();
                	parametersConexion.put("Host", "www.yellowproxy.net");
                	parametersConexion.put("Referer",link);
                	
                	extractor=new LinksYellowProxy();
                	contenidoHTML=downloaderFuente.descargarHTML(link,"GET",parametersConexion);
                } 

                String content=contenidoHTML.replaceAll("\n","");
                if(content.trim().length()>0)
                {
                    extractor.setContenidoHTML(content);
                    List<Bibliografia>linksResult=extractor.getLinks();
                    addLinks(linksResult,resultados);
                }
        }
        private void addLinks(List<Bibliografia> lnk,List<Bibliografia> resultados)
        {  
            for(Bibliografia l:lnk)
               if(!resultados.contains(l))  resultados.add(l);
            
         }
        public  List<Bibliografia>  buscar(String busqueda, boolean proxy)
        {  
            List<Bibliografia> resultados=new ArrayList<Bibliografia> ();
            
            try{
            
            
            if(ConfiguracionConexionWeb.bing)
            {	
            	  String lk_bing1="http://www.bing.com/search?q="+HtmlUtils.encodeURL(busqueda)+"&go=&qs=ds&form=QBRE&filt=all";
		          cargarResultados(lk_bing1,resultados);
            }
            if(ConfiguracionConexionWeb.yahoo)
            {	
		          String lk_yahoo1="http://search.yahoo.com/search;_ylt=A0oG7t3FFzpSD00AiG9XNyoA;_ylc=X1MyNzY2Njc5X3IyYmNrM2g1bzcxOTh0MTg2NSUyNmIlM0QzJTI2cyUzRHZkY3NyY3B2aWRBajVpVFVnZXVyQTRsd2NLVWRDZ3hRZkp5RzVaU2xJNkY4VUFBZVJEZnJ5ZnAtdC02MDBmcjJzYi10b3BncHJpZGdDMHN4M0ZmVGVpSy5PMEN5emJad0FuX3JzbHQxMG5fc3VnZzEwb3JpZ2luc2VhcmNoLnlhaG9vLmNvbXBvczBwcXN0cnBxc3RybHFzdHJsNHF1ZXJ5amF2YXRfc3RtcDEzNzk1Mzg5ODIwMDh2dGVzdGlkVklQMzA4?p="+HtmlUtils.encodeURL(busqueda)+"&fr2=sb-top&fr=yfp-t-600";
		          cargarResultados(lk_yahoo1,resultados);
            }
            if(ConfiguracionConexionWeb.google)
            {	
            	
            	  String lk_google1="https://www.google.com/search?q="+busqueda ;
		          System.out.println(lk_google1);
            	  if(proxy) 
            	  {
	            		String lk_proxy="";  
	            		if(proxyNum==0)  
	            		{            	 
	            			lk_proxy="http://webproxy.net/view?q="+HtmlUtils.encodeURL(lk_google1);
		            		   lk_proxy="https://www.yellowproxy.net/browse.php?u="+HtmlUtils.encodeURL(lk_google1)+"&b=28";
	            		  	proxyNum=1;
	            		}
	            	   else if(proxyNum==1)  
	            		{
	            		    lk_proxy="http://www.onlinebrowser.net/browse.php?u="+HtmlUtils.encodeURL(lk_google1)+"&b=36&f=norefer";
	            			proxyNum=2;
	            		}
	            	   else if(proxyNum==2)  
	            		{
	            		   lk_proxy="https://www.yellowproxy.net/browse.php?u="+HtmlUtils.encodeURL(lk_google1)+"&b=28";
	            			proxyNum=0;
	            		}
	            		cargarResultados(lk_proxy,resultados);
            	  }
		          else      cargarResultados("https://www.google.com/search?q="+HtmlUtils.encodeURL(busqueda),resultados);
            }
            
           
            }catch(Exception e){e.printStackTrace();}
           return resultados;
        }

}